package com.itheima.springbootwebtlias.controller;

import com.itheima.springbootwebtlias.pojo.ClaQueryParam;
import com.itheima.springbootwebtlias.pojo.Clazz;
import com.itheima.springbootwebtlias.pojo.PageResult;
import com.itheima.springbootwebtlias.pojo.Result;
import com.itheima.springbootwebtlias.service.ClazzService;
import jakarta.servlet.http.PushBuilder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@RestController
@RequestMapping("/clazzs")
public class ClazzController {

    @Autowired
    private ClazzService clazzService;

    //添加班级处理器方法
    @PostMapping
    public Result save(@RequestBody Clazz clazz) {
        //1.接收请求参数：json
        log.info("接收到的参数：{}", clazz);
        //2.调用业务层Service功能方法，添加班级
        clazzService.saveClazz(clazz);
        log.info("添加成功");
        //3.封装响应数据
        return Result.success();
    }

    //查询所有班级
    @GetMapping("/list")
    public Result findAll() {
        //1.接收请求参数：无
        //2.调用业务层Service功能方法，查询所有班级
        List<Clazz> clazzList = clazzService.findAll();
        //3.封装响应数据 参数格式：json格式
        log.info("查询结果：{}", clazzList);
        return Result.success(clazzList);
    }

    //分页 + 条件查询处理器方法
    @GetMapping
    public Result page(ClaQueryParam claQueryParam) {
        //1.接收请求参数: kv格式
        log.info("分页条件查询，请求参数：{}", claQueryParam);
        //2.调用业务层Service功能方法，分页 + 条件查询
        PageResult pageResult = clazzService.page(claQueryParam);
        //3.封装响应数据
        return Result.success(pageResult);
    }

    //3.2 删除班级
    @DeleteMapping("/{id}")
    public Result removeById(@PathVariable Integer id) {
        //1.接收请求参数：id  路径参数
        log.info("接收到的参数：{}", id);
        //2.调用业务层Service功能方法，删除班级
        clazzService.delClazz(id);

        //3.封装响应数据
        return Result.success();
    }

    //3.4 根据ID查询回显
    @GetMapping("/{id}")
    public Result findById(@PathVariable Integer id) {
        //1.接收请求参数：id 路径参数
        log.info("根据id查询员工信息，接收到的参数：{}", id);
        //2.调用业务层Service功能方法，根据ID查询
       Clazz  clazz = clazzService.findById(id);
        //3.封装响应数据
        return Result.success(clazz);
    }

    //3.5 修改班级,编辑功能
    @PutMapping
    public Result update(@RequestBody Clazz clazz){
        //1.接收请求参数：json
        log.info("修改更新班级信息，接收到的参数：{}",clazz);
        //2.调用业务层Service功能方法，修改班级信息
        clazzService.update(clazz);
        //3.封装响应数据
        return Result.success();
    }

}
